home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 …ember: Reference Library / Dev.CD Dec 94.toast / Periodicals / develop / develop Issue 15 / develop 15 code / Floating Windows / Sample Source / menuDispatch.c < prev    next >
Encoding:
Text File  |  1994-10-13  |  3.6 KB  |  150 lines  |  [TEXT/MMCC]

  1. // If the interfaces aren't included yet, do the standard includes. Otherwise, precompiled headers
  2. // have been loaded already, thank you very much
  3. #ifndef __TYPES__
  4.     #include <Types.h>
  5.     #include <AppleEvents.h>
  6.     #include <Desk.h>
  7.     #include <Dialogs.h>
  8.     #include <Editions.h>
  9.     #include <Events.h>
  10.     #include <Menus.h>
  11.     #include <SegLoad.h>
  12.     #include <TextUtils.h>
  13.     #include <ToolUtils.h>
  14.     #include <Windows.h>
  15. #endif
  16.  
  17. #include "eventHandler.h"
  18. #include "fileMenuRoutines.h"
  19. #include "menuDispatch.h"
  20. #include "WindowExtensions.h"
  21.  
  22. /* Globals */
  23.     
  24. extern Boolean                gDone;                        // Set to true if user selects Quit
  25. extern WindowRef            gRecordingFloater;            // Reference to recording floating window
  26. extern WindowRef            gToolsFloater;                // Reference to tools floating window
  27. extern ActivateHandlerUPP    gActivateEventHandler;
  28.  
  29. void DoMenuCommand(long menuChoice)
  30. {
  31.     long    menuID;
  32.     long    menuItem;
  33.     short    daRef;
  34.     Str255    daName;
  35.     Boolean    editResult;
  36.     
  37.     menuID = (menuChoice & 0xFFFF0000) >> 16;
  38.     menuItem = menuChoice & 0x0000FFFF;
  39.     
  40.     switch (menuID) {
  41.         case rAppleMenuID:        if (menuItem == kAboutItem)
  42.                                     DoAbout();
  43.                                 else {
  44.                                     GetItem(GetMHandle(rAppleMenuID), (short) menuItem, daName);
  45.                                     daRef = OpenDeskAcc(daName);
  46.                                 }
  47.                                 break;
  48.         case rFileMenuID:        HandleFileMenuItems((short) menuItem);
  49.                                 break;
  50.         case rEditMenuID:        editResult = SystemEdit((short) (menuItem - 1));
  51.                                 break;
  52.         case rFloatersMenuID:    HandlerFloaterMenuItems((short) menuItem);
  53.                                 break;
  54.     }
  55.     HiliteMenu(0);
  56. }
  57.  
  58. void DoAbout()
  59. {
  60.     short    alertResult;
  61.     
  62.     DeactivateFloatersAndFirstDocumentWindow();
  63.     alertResult = Alert(256, nil);
  64.     ActivateFloatersAndFirstDocumentWindow();
  65. }
  66.  
  67. void HandleFileMenuItems(short theItem)
  68. {
  69.     switch (theItem) {
  70.         case kNewItem:        CreateNewDocumentWindow();
  71.                             break;
  72.         case kOpenItem:        GetFileToOpen();
  73.                             break;
  74.         case kCloseItem:    CloseFirstDocumentWindow();
  75.                             break;
  76.         case kFindItem:        ShowFindDialog();
  77.                             break;
  78.         case kQuitItem:        gDone = true;
  79.                             break;
  80.     }
  81. }
  82.  
  83. void HandlerFloaterMenuItems(short theItem)
  84. {
  85.     Boolean        floaterVisible;
  86.     WindowRef    floaterPicked;
  87.     
  88.     switch (theItem) {
  89.         case kRecordingItem:    floaterPicked = gRecordingFloater;
  90.                                 break;
  91.         case kToolsItem:        floaterPicked = gToolsFloater;
  92.                                 break;
  93.     }
  94.     
  95.     floaterVisible = GetWindowVisible(floaterPicked);
  96.     if (floaterVisible == false)
  97.         ShowReferencedWindow(floaterPicked);
  98.     else
  99.         HideReferencedWindow(floaterPicked);
  100.     CheckItem(GetMHandle(rFloatersMenuID), theItem, !floaterVisible);
  101. }
  102.  
  103. void CreateNewDocumentWindow()
  104. {
  105.     WindowRef    newDocumentWindow;
  106.     OSErr        createWindowError;
  107.     
  108.     ValidateWindowList();
  109.     createWindowError = GetNewWindowReference(&newDocumentWindow, 128,
  110.                                                 (WindowRef) -1, gActivateEventHandler);
  111.     if (createWindowError == noErr) {
  112.         ShowReferencedWindow(newDocumentWindow);
  113.         EnableItem(GetMHandle(rFileMenuID), kCloseItem);
  114.     }
  115. }
  116.  
  117. void CloseFirstDocumentWindow()
  118. {
  119.     WindowRef    firstDocumentWindow;
  120.     
  121.     ValidateWindowList();
  122.     firstDocumentWindow = FrontNonFloatingWindow();
  123.     if (firstDocumentWindow != nil)
  124.         DisposeWindowReference(firstDocumentWindow);
  125.     if (FrontNonFloatingWindow() == nil)
  126.         DisableItem(GetMHandle(rFileMenuID), kCloseItem);
  127. }
  128.  
  129. void ShowFindDialog()
  130. {
  131.     DialogPtr    findDialog;
  132.     
  133.     DeactivateFloatersAndFirstDocumentWindow();
  134.     findDialog = GetNewDialog(257, nil, (WindowPtr) -1);
  135.     DisableItem(GetMHandle(rAppleMenuID), 0);
  136.     DisableItem(GetMHandle(rFileMenuID), 0);
  137.     DrawMenuBar();
  138. }
  139.  
  140. void DisposeFindDialog()
  141. {
  142.     DialogPtr    findDialog;
  143.     
  144.     findDialog = FrontWindow();
  145.     DisposeDialog(findDialog);
  146.     ActivateFloatersAndFirstDocumentWindow();
  147.     EnableItem(GetMHandle(rAppleMenuID), 0);
  148.     EnableItem(GetMHandle(rFileMenuID), 0);
  149.     DrawMenuBar();
  150. }